Skip to content

fix(mobile): Keep the last line of iOS assistant replies visible - #8220

Closed
mwolson wants to merge 337 commits into
pingdotgg:t3code/codex-turn-mappingfrom
mwolson:fix/mobile-ios-markdown-stale-content
Closed

mwolson wants to merge 337 commits into
pingdotgg:t3code/codex-turn-mappingfrom
mwolson:fix/mobile-ios-markdown-stale-content

Conversation

@mwolson

@mwolson mwolson commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Long iOS markdown replies were reported to clip their last line on first open. The native view now lays out its text container at the current width before drawing, and the React wrapper uses the native line count as a minimum height, including Dynamic Type scaling.

Rebased onto v2 (07e8f8d40d). The current wrapper exposes a typed onNativeTextLayout callback only on the iOS native path; the React Native fallback paths omit it. Mike's native layout and height-floor changes are preserved.

Verification at e2b1c77f9b7f:

  • The signed iOS simulator build passes on iPhone 17e / iOS 26.5.
  • The focused TypeScript check, formatting, and React Doctor pass. Targeted lint has one unchanged warning in the existing child traversal.
  • The real app opens three completed synthetic replies: 6,305 characters with headings, 495 characters with lists/code/quote, and 9,286 characters of plain text. All three show their final sentence on both the v2 baseline and this head. The heading sample also passes at accessibility-large Dynamic Type.
  • The reported clipping did not reproduce on the current v2 baseline. These comparisons establish basic rendering compatibility; they do not yet prove the fix's benefit. Hold for a reproducible affected thread before landing.
  • CI still has the shared v2 formatting, migration expectation, dependency patch-resolution, and provider-replay failures. No current-head CI pass is claimed. The workflow's native static-analysis job is skipped for this Objective-C++ change.

Both builds used the same disposable backend, synthetic conversations, simulator, and Metro setup. Two untracked resolution-only shims worked around v2's existing .js imports of TypeScript sources. The markdown implementation came directly from each compared commit. Streaming, a physical device, and wider layouts were not verified.

Before: v2 07e8f8d40d After: e2b1c77f9b7f
Before: complete final sentence on current v2 After: complete final sentence with native layout fix
Large Dynamic Type comparison
Before: v2 After: prepared PR
Before: full last sentence at large Dynamic Type After: full last sentence at large Dynamic Type

Recording: first open on the prepared iOS build (8 seconds).

Original implementation by Mike Olson. Preparation: GPT-6 via Codex.

@coderabbitai

coderabbitai Bot commented Aug 25, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: b4879da9-c4d0-49e8-b779-ed7b703918bd

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 25, 2026
@mwolson mwolson changed the title fix(mobile): Rebuild iOS markdown from current children fix(mobile): Eliminate iOS markdown truncation Aug 25, 2026
@mwolson
mwolson marked this pull request as ready for review August 25, 2026 19:34
Comment thread apps/mobile/src/native/SelectableMarkdownText.ios.tsx Outdated
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Aug 25, 2026
@macroscopeapp

macroscopeapp Bot commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at e2b1c77

Macroscope's review found this PR approvable — This is a focused iOS rendering fix that forces current text layout measurement and reserves height for all rendered reply lines. The changes are confined to the existing markdown component and do not alter APIs, defaults, security-sensitive code, or deployment behavior.

You can add or adjust custom eligibility rules. Learn more.

@mwolson
mwolson force-pushed the fix/mobile-ios-markdown-stale-content branch from d247f47 to eb8a1b8 Compare August 25, 2026 19:55
@macroscopeapp
macroscopeapp Bot dismissed their stale review August 25, 2026 19:55

Dismissing prior approval to re-evaluate eb8a1b8

@github-actions github-actions Bot added size:M 30-99 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 25, 2026
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Aug 25, 2026
@mwolson
mwolson force-pushed the fix/mobile-ios-markdown-stale-content branch from eb8a1b8 to 4fe892f Compare August 25, 2026 20:55
@macroscopeapp
macroscopeapp Bot dismissed their stale review August 25, 2026 20:56

Dismissing prior approval to re-evaluate 4fe892f

@github-actions github-actions Bot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Aug 25, 2026
@mwolson
mwolson force-pushed the fix/mobile-ios-markdown-stale-content branch from 4fe892f to dddba7e Compare August 25, 2026 21:06
Comment thread apps/mobile/src/features/threads/ThreadFeed.tsx Outdated
Comment thread apps/mobile/src/features/threads/ThreadFeed.tsx Outdated
@mwolson
mwolson force-pushed the fix/mobile-ios-markdown-stale-content branch from dddba7e to 1f549af Compare August 25, 2026 21:34
Comment thread apps/mobile/modules/t3-markdown-text/src/NativeMarkdownSelectableText.ios.tsx Outdated
Comment thread apps/mobile/modules/t3-markdown-text/src/NativeMarkdownSelectableText.ios.tsx Outdated
Comment thread apps/mobile/modules/t3-markdown-text/src/NativeMarkdownSelectableText.ios.tsx Outdated
@mwolson
mwolson force-pushed the fix/mobile-ios-markdown-stale-content branch 2 times, most recently from c5ab664 to 078b7d7 Compare August 25, 2026 21:48
@mwolson mwolson changed the title fix(mobile): Eliminate iOS markdown truncation fix(mobile): Keep the last line of iOS assistant replies visible Aug 25, 2026
@github-actions github-actions Bot added size:S 10-29 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 25, 2026
Comment thread apps/mobile/modules/t3-markdown-text/src/NativeMarkdownSelectableText.ios.tsx Outdated
Comment thread apps/mobile/modules/t3-markdown-text/src/NativeMarkdownSelectableText.ios.tsx Outdated
@mwolson
mwolson force-pushed the fix/mobile-ios-markdown-stale-content branch from 078b7d7 to 3d92556 Compare August 25, 2026 22:31
juliusmarminge and others added 15 commits September 4, 2026 11:09
Adapt grouped tool summaries and the floating working timer to V2 run, attempt, and queue state. Bring over the composer, keyboard, and disclosure transitions while retaining the V2 activity inspector and queue controls.

Keep OV2 web composer and grouping behavior intact; share only the existing command label parser with mobile.
Restores main features dropped by the policy replay: pingdotgg#8569 theme wiring,
settings search rework, pingdotgg#8803 workspace-mutation refresh (v2-adapted),
video + image previews (web and mobile, v2-adapted), pingdotgg#8862 Expo glass,
and the round's docs. Timeline thinking rows (pingdotgg#8984) stay on the v2
work-live system.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The v2 equivalents of main's pingdotgg#8984 and pingdotgg#8922: a "Working for ..." header
anchors the active run, the trailing live tool row survives between
actions in past tense instead of vanishing, and a shimmering Thinking
row marks reasoning gaps. During workspace preparation the header shows
"Setting up worktree..." (driven by the local dispatch flag or the v2
run's preparing status, so remote viewers see it too), the composer
footer span is gone, and draft promotion waits until the run starts or
startup fails instead of navigating mid-preparation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adopts the round's main features into the v2 architecture: the pingdotgg#9023
media rework (streamed videos, media-file assets, protocol-relative
links), pingdotgg#9098 shared live-activity row folded into the v2 working and
thinking rows, the pingdotgg#9084/pingdotgg#9078 Claude model catalog for v2 consumers,
a native pingdotgg#9005 OpenCode child-session abort in the v2 adapter, pingdotgg#9013's
landed LegendList patch, and per-environment sidebar provider entries.
For pingdotgg#8600 the server-side pieces land, but auto-settle evaluation stays
client-side (reading the new server-owned settings) until the v2
orchestrator grows its own settlement reactor; main's v1-only reactor
and coalescer additions are dropped with the rest of the v1 path.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ator

Ports pingdotgg#8600's server-owned settlement to orchestration v2 instead of
keeping client-side evaluation. A ThreadSettlementService sweep runs at
startup, on auto-settle settings changes, and once per minute: it
evaluates inactivity and merged or closed pull requests over v2 thread
shells and dispatches the new guarded thread.auto-settle command, which
rejects threads that changed after the sweep's snapshot or carry any
explicit override, then reuses the orchestrator's settle lifecycle.
With the server deciding, the clients drop their effectiveSettled
evaluation and partition on the persisted settledOverride like main.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adopts main's round-19 features into the v2 stack: payload-budgeted
orchestration replay (pingdotgg#8992), sidebar row subscription leases (pingdotgg#9052),
tool group virtualization and scroll anchoring (pingdotgg#9106), repeated-command
and browser-group presentation, inline assistant citations (pingdotgg#9146),
per-cwd provider skills discovery (pingdotgg#8778), Claude composer skill
dispatch (pingdotgg#9128), grok health probe and model negotiation (pingdotgg#9154), and
the failed-tool thinking fallback (pingdotgg#9165).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Round 17 adopted main's pingdotgg#8850 ComposerBanner.Attachment (mx-auto plus the
standalone drawer-inset width) without main's matching mounts, so the
stash tab's ml-auto lost to the attachment's auto right margin and the
tab centered over the composer. Column now spans its attachments like
main does, the stash tab zeroes the right margin, and the stash menu
keeps the full dock width.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The branch had drifted from main's composer and work-log design in ways
unrelated to orchestration v2: a pre-revert "Working for" shoulder tab
on the composer (main reverted pingdotgg#8693 and re-landed pingdotgg#8734 without it),
an inline stash variant plus in-flow stash menu, expanded tool rows that
hid their icons, an unmounted woke-thread banner, a composer scroll
observer main never had, and a right-panel toggle that lost its
showRightPanelControl gate so it rendered twice with the panel open.

ChatComposer and its satellites now start from main's files with only
the v2 delta re-applied (dispatch modes, queued-message editing, runtime
request ids, response capability). Background tasks surface as a
ChatView banner in main's backgroundLiveness shape instead of a
composer tab. SimpleWorkEntryRow takes main's PlainWorkEntryRow body
with the V2ItemInspector kept behind the expander.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Renumbers the v2 migrations 044-052 to 045-053 behind main's
044_ClearAutomaticProjectModelDefaults, and adopts main's sticky
new-thread selection (pingdotgg#9164), local-only worktree bases in the v2 launch
path (pingdotgg#8751), the PR summary read for settlement (pingdotgg#9176), Claude per-cwd
skills (pingdotgg#9210), the provider editor redesign with the branch's dedicated
environment fields re-grafted (pingdotgg#8508), and the client half of
continue-threads-across-restart (pingdotgg#9167). The server-side continuation
markers stay unported: they live in the v1 session directory, and v2
recovery terminalizes running runs on restart, so the capability is
withheld until the v2 runtime carries them.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Index event sequence lookups, recover only threads with pending work, and page projection verification and rebuilds. Bound provider event logging and omit turn histories when resuming Codex threads.

Allow delegated thread identifiers through relay routes. Add focused regression coverage and document the performance constraints.
Retain main's composer, work-log, settings, mobile and performance changes through c8f77e0 while preserving v2 runs, queued messages, provider handoffs and durable history.

Port native compaction and logout, asynchronous Codex questions, provider usage accounting, automatic settlement and PR refresh into the v2 services. Bound live event retention during replay and delivery, measure thread replay before decoding, and read checkpoint metadata without loading transcripts or patches.

Keep main migrations through 047 and move the v2 migrations to 048–058. Preserve the existing branch history and the pre-rebase backup.

Model: GPT-6. Harness: Codex.
@juliusmarminge
juliusmarminge force-pushed the t3code/codex-turn-mapping branch from 9eeed8c to 8af5734 Compare September 4, 2026 18:23
juliusmarminge and others added 4 commits September 4, 2026 13:11
- Preserve Codex turn identity while suppressing duplicate diff notifications
- Optimize settlement projections and isolate thread visit handling
- Add concurrency and regression coverage across server and mobile
Restore the completed work timer divider and text size from main. Keep todo-list progress in the composer and omit it from web and mobile timeline entries, including completed task lists.

Verified pending, running, and completed task projection; 187 focused web tests and 35 mobile tests pass. Web and mobile typechecks pass.
Show Send when a running thread has draft content. Separate submission follow
from first-message anchoring so later sends do not reserve extra blank space.
Restore Android initial composer insets and iOS focus-aware dictation insets.

Keep opening and final assistant replies visible around completed folds,
anchoring Worked for at the first hidden item while preserving v2 relationship
cards and execution-attempt behavior.

Validation: 107 focused tests and the mobile typecheck pass. Formatting passes;
scoped lint and React Doctor report warnings but no errors. No simulator run.
The first layout of a long selectable markdown row can be one line too
short, so UITextView clips the ending until the thread is opened again.
Measure every drawn line and grow the row when it is taller than that
first layout.
@juliusmarminge
juliusmarminge force-pushed the fix/mobile-ios-markdown-stale-content branch from 624a7fe to e2b1c77 Compare September 4, 2026 22:37
@macroscopeapp
macroscopeapp Bot dismissed their stale review September 4, 2026 22:38

Dismissing prior approval to re-evaluate e2b1c77

@github-actions github-actions Bot added size:M 30-99 changed lines (additions + deletions). and removed size:S 10-29 changed lines (additions + deletions). labels Sep 4, 2026
@juliusmarminge
juliusmarminge force-pushed the t3code/codex-turn-mapping branch 3 times, most recently from b82facd to 2ac9bfe Compare September 5, 2026 04:56
@juliusmarminge

Copy link
Copy Markdown
Member

Closing as part of the open-PR backlog sweep (wave 1).

Reason: 1096-file / 391k-line contaminated rebase for a one-line iOS clip

Reopen if this is still wanted and you’re willing to rebase onto current main.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M 30-99 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants